home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / Ink.h < prev    next >
C/C++ Source or Header  |  1992-08-17  |  6KB  |  239 lines

  1. #ifndef Ink_First
  2. #ifdef __GNUG__
  3. //pragma once
  4. #pragma interface
  5. #endif
  6. #define Ink_First
  7.  
  8. #include "Types.h"
  9. #include "Object.h"
  10.  
  11. class RGB;
  12. class Ink;
  13. class HSVColor;
  14. class RGBColor;
  15. class InkManager;
  16. class Port;
  17. class OrdCollection;
  18.  
  19. typedef Ink *GrPattern; // obsolete
  20. typedef u_short word;     // obsolete
  21.  
  22. const word MaxWord= 255;
  23.  
  24.  
  25. extern InkManager *gInkManager;
  26.  
  27. extern Ink *gInkXor,
  28.        *gInkNone,
  29.        *gInkWhite,
  30.        *gInkBlack,
  31.        *gHighlightColor;
  32.        
  33. // obsolete !!!
  34. extern Ink *ePatXor, *ePatNone, *ePatWhite, *ePatBlack;
  35. extern Ink *ePatGrey12, *ePatGrey25, *ePatGrey40, *ePatGrey50, *ePatGrey60;
  36. extern Ink *ePatGrey75;
  37. extern Ink *ePat00, *ePat01, *ePat02, *ePat03, *ePat04, *ePat05;
  38. extern Ink *ePat06, *ePat07, *ePat08, *ePat09, *ePat10, *ePat11;
  39. extern Ink *ePat12, *ePat13, *ePat14, *ePat15;
  40.  
  41. enum InkFlags {
  42.     eInkChanged     =   BIT(eObjLast+1),
  43.     eInkLast        =   eObjLast + 1
  44. };
  45.  
  46. //---- Ink ---------------------------------------------------------------------
  47.  
  48. class Ink : public Object {
  49.     long int id;
  50. public:
  51.     MetaDef(Ink);
  52.     Ink();
  53.     Ink(long i);
  54.     
  55.     long GetId()
  56.     { return id; }
  57.     
  58.     void SetId(long id);
  59.     virtual void SetInk(Port *p);
  60.     bool IsEqual(Object*);
  61.     OStream& PrintOn(OStream&);
  62.     IStream& ReadFrom(IStream&);
  63.     Object *ReadAndMap(IStream&);
  64. };
  65.  
  66. //---- RGB ---------------------------------------------------------------------
  67.  
  68. class RGB {
  69. public:
  70.     short red, green, blue;
  71.  
  72. public:
  73.     RGB()
  74.     { }
  75.     RGB(const RGB &c);
  76.     RGB(const HSVColor &c);
  77.     RGB(float graylevel);
  78.     RGB(short rgb)
  79.     { red= green= blue= rgb; }
  80.     RGB(short r, short g, short b)
  81.     { red= r; green= g; blue= b; }
  82.  
  83.     void SetRGB(short r, short g, short b);
  84.     bool IsGrey()
  85.     { return red == green && green == blue; }
  86.     OStream& PrintOn(OStream&);
  87.     IStream& ReadFrom(IStream&);
  88.     friend OStream& operator<< (OStream &os, RGB &rgb)
  89.     { return rgb.PrintOn(os); }
  90.     friend IStream& operator>> (IStream &is, RGB &rgb)
  91.     { return rgb.ReadFrom(is); }
  92.     short AsGreyLevel();
  93.  
  94.     friend RGB operator-(RGB &op1, RGB &op2)
  95.     { return RGB(op1.red-op2.red, op1.green-op2.green, op1.blue-op2.blue); }
  96.     friend RGB operator+(RGB &op1, RGB &op2)
  97.     { return RGB(op1.red+op2.red, op1.green+op2.green, op1.blue+op2.blue); }
  98.     friend RGB operator*(RGB &op1, int v)
  99.     { return RGB(op1.red*v, op1.green*v, op1.blue*v); }
  100.     friend RGB operator/(RGB &op1, int v)
  101.     { return RGB(op1.red/v, op1.green/v, op1.blue/v); }
  102.     RGB operator+=(RGB &op1)
  103.     { red+= op1.red; green+= op1.green; blue+= op1.blue; return *this; }
  104.  
  105.     void Clip() {
  106.         if (red < 0) red= 0; else if (red > 255) red= 255;
  107.         if (green < 0) green= 0; else if (green > 255) green= 255;
  108.         if (blue < 0) blue= 0; else if (blue > 255) blue= 255;
  109.     }
  110. };
  111.  
  112. //---- HSVColor -------------------------------------------------------------------
  113.  
  114. class HSVColor {
  115. public:
  116.     short hue, saturation, value;
  117.  
  118. public:
  119.     HSVColor()
  120.     { }
  121.     HSVColor(const HSVColor &c);
  122.     HSVColor(const RGB &c);
  123.     HSVColor(short graylevel)
  124.     { hue= saturation= 0; value= graylevel; }
  125.     HSVColor(RGBColor&);
  126.     HSVColor(short h, short s, short v)
  127.     { hue= h; saturation= s; value= v; }
  128.     OStream& PrintOn(OStream&);
  129.     IStream& ReadFrom(IStream&);
  130.     friend OStream& operator<< (OStream &os, HSVColor &hsv)
  131.     { return hsv.PrintOn(os); }
  132.     friend IStream& operator>> (IStream &is, HSVColor &hsv)
  133.     { return hsv.ReadFrom(is); }
  134. };
  135.  
  136. //---- ColorMap ----------------------------------------------------------------
  137.  
  138. class ColorMap {
  139. public:
  140.     int size;
  141.     RGB *map;
  142. public:
  143.     ColorMap(int sz);
  144.     ColorMap(ColorMap*);
  145.     ~ColorMap();
  146.     void Expand(int sz);
  147.     int Size()
  148.     { return size; }
  149.     void SetEntry(int ix, RGB &rgb);
  150.     RGB GetEntry(int ix);
  151.     OStream& PrintOn(OStream&);
  152.     IStream& ReadFrom(IStream&);
  153.     friend OStream& operator<< (OStream &os, ColorMap &cmap)
  154.     { return cmap.PrintOn(os); }
  155.     friend IStream& operator>> (IStream &is, ColorMap &cmap)
  156.     { return cmap.ReadFrom(is); }
  157.     bool IsGrey();
  158. };
  159.  
  160. //---- RGBColor ----------------------------------------------------------------
  161.  
  162. class RGBColor: public Ink {
  163. friend class HSVColor;
  164.     short prec;
  165.     RGB rgb;
  166. public:
  167.     class Port *port;
  168.     
  169. public:
  170.     MetaDef(RGBColor);
  171.     RGBColor();
  172.     RGBColor(RGBColor*);
  173.     RGBColor(const RGB &c, short prec= 0);
  174.     RGBColor(const HSVColor &h, short prec= 0);
  175.     RGBColor(const RGBColor &c);
  176.     RGBColor(short r, short g, short b, short prec= 0);
  177.     RGBColor(short graylevel, short prec= 0);
  178.     RGBColor(float graylevel, short prec= 0);
  179.     
  180.     short GetRed()
  181.     { return rgb.red; }
  182.     short GetGreen()
  183.     { return rgb.green; }
  184.     short GetBlue()
  185.     { return rgb.blue; }
  186.     short GetPrec()
  187.     { return prec; }
  188.     RGB *GetRGB()
  189.     { return &rgb; }
  190.     bool SetHSV(short hue, short sat, short value, short p= 0);
  191.     bool SetRGB(RGB *rgb, short p= 0);
  192.     bool SetRGB(short r, short g, short b, short p= 0);
  193.     bool SetRed(short r)
  194.     { return SetRGB(r, rgb.green, rgb.blue, prec); }
  195.     bool SetGreen(short g)
  196.     { return SetRGB(rgb.red, g, rgb.blue, prec); }
  197.     bool SetBlue(short b)
  198.     { return SetRGB(rgb.red, rgb.green, b, prec); }
  199.     bool SetPrec(short p)
  200.     { return SetRGB(rgb.red, rgb.green, rgb.blue, p); }
  201.     int AsGreyLevel()
  202.     { return rgb.AsGreyLevel(); }
  203.     
  204.     void SetInk(Port *p);
  205.     OStream& PrintOn(OStream&);
  206.     IStream& ReadFrom(IStream&);
  207.     Object *ReadAndMap(IStream&);
  208. };
  209.  
  210. //---- RGBColorCell ------------------------------------------------------------
  211.  
  212. class RGBColorCell: public RGBColor {
  213. public:
  214.     MetaDef(RGBColorCell);
  215.     RGBColorCell(int id);
  216.     void SetInk(Port *p);
  217.     OStream& PrintOn(OStream&);
  218.     IStream& ReadFrom(IStream&);
  219.     Object *ReadAndMap(IStream&);
  220. };
  221.  
  222. //---- InkManager --------------------------------------------------------------
  223.  
  224. class InkManager : public Object {
  225. public:
  226.     MetaDef(InkManager);
  227.     InkManager();
  228.     virtual ~InkManager();
  229.     
  230.     friend RGBColor *new_RGBColor(short r, short g, short b, short prec= 0);
  231.     friend RGBColor *new_Grey(float graylevel, short prec= 0);
  232.     
  233.     bool Init();        // returns TRUE on error
  234. private:
  235.     OrdCollection *sharedinks;
  236. };
  237.  
  238. #endif
  239.